home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / Spiele / GEMSPIEL / COLTRIS / SOURCES / QCOPY.S < prev    next >
Encoding:
Text File  |  1995-01-27  |  2.6 KB  |  126 lines

  1. tet_buffer_width    EQU        20        ; in byte
  2. col_buffer_width    EQU        16        ; in byte
  3.  
  4.     XREF    screen_width    ; word, bildschirmbreite in byte
  5.     XREF    buffer_width    ; word, pufferbreite in byte
  6.     XREF    source_width    ; word, quellbreite in byte
  7.  
  8.     XDEF    copy_160        ; tetris 16 *
  9.     XDEF    copy_200        ; tetris 20 *
  10.         ;   --------        ; tetris 22 (geht nicht)
  11.     XDEF    copy_120        ; columns 20 *
  12.     XDEF    copy_144        ; columns 24 *
  13.     XDEF    copy_168        ; columns 28
  14.  
  15.     XDEF    xcopy16
  16.     XDEF    xxcopy32
  17.  
  18. tet_width    equ        28
  19. col_width    equ        40
  20.  
  21. copy_160:    ; a0 ziel
  22.             ; a1 quelle
  23.             ; d0 lines-1
  24.             ; BREITE: 160 pixel = 20 byte = 5 long
  25.         MOVEM.L    D3-D5,-(SP)
  26. .loop:    MOVEM.L (A1)+,D1-D5
  27.         ADD.W    #20,A0
  28.         MOVEM.L    D1-D5,-(A0)
  29.         ADD.W    screen_width,A0
  30.         DBRA    D0,.loop
  31.         MOVEM.L    (SP)+,D3-D5
  32.         RTS
  33.  
  34. copy_200:    ; a0 ziel
  35.             ; a1 quelle
  36.             ; d0 lines-1
  37.             ; BREITE: 200 pixel = 25 byte = 6 long + 1 byte
  38.         MOVEM.L    D3-D6,-(SP)
  39. .loop:    MOVEM.L (A1)+,D1-D6
  40.         ADD.W    #24,A0
  41.         MOVEM.L    D1-D6,-(A0)
  42.         MOVE.B  (A1)+,D1
  43.         MOVE.B    D1,24(A0)
  44.         ADDQ.W    #1,A1
  45.         ADD.W    screen_width,A0
  46.         DBRA    D0,.loop
  47.         MOVEM.L    (SP)+,D3-D6
  48.         RTS
  49.  
  50. copy_120:    ; a0 ziel
  51.             ; a1 quelle
  52.             ; d0 lines-1
  53.             ; BREITE: 120 pixel = 15 byte = 3 long 3 byte
  54.             ; breite der quelle 16 byte
  55.         MOVEM.L    D3,-(SP)
  56. .loop:    MOVEM.L (A1)+,D1-D3
  57.         ADD.W    #12,A0
  58.         MOVEM.L D1-D3,-(A0)
  59.         MOVE.W  (A1)+,D1
  60.         MOVE.W    D1,12(A0)
  61.         MOVE.B  (A1)+,D1
  62.         MOVE.B    D1,14(A0)
  63.         ADDQ.W    #1,A1
  64.         ADDA.W    screen_width,A0
  65.         DBRA    D0,.loop
  66.         MOVEM.L    (SP)+,D3
  67.         RTS
  68.  
  69. copy_144:    ; a0 ziel
  70.             ; a1 quelle
  71.             ; d0 lines-1
  72.             ; BREITE: 144 pixel = 18 byte = 4 long 2 byte
  73.             ; breite der quelle 18 byte
  74.         MOVEM.L    D3-D4,-(SP)
  75. .loop:    MOVEM.L (A1)+,D1-D4
  76.         ADD.W    #16,A0
  77.         MOVEM.L D1-D4,-(A0)
  78.         MOVE.W  (A1)+,D1
  79.         MOVE.W    D1,16(A0)
  80.         ADDA.W    screen_width,A0
  81.         DBRA    D0,.loop
  82.         MOVEM.L    (SP)+,D3-D4
  83.         RTS
  84.  
  85. copy_168:    ; a0 ziel
  86.             ; a1 quelle
  87.             ; d0 lines-1
  88.             ; BREITE: 168 pixel = 21 byte = 5 long 1byte
  89.             ; breite der quelle 22 byte
  90.         MOVEM.L    D3-D5,-(SP)
  91. .loop:    MOVEM.L (A1)+,D1-D5
  92.         ADD.W    #20,A0
  93.         MOVEM.L D1-D5,-(A0)
  94.         MOVE.B  (A1)+,D1
  95.         MOVE.B    D1,20(A0)
  96.         ADDQ.W    #1,A1
  97.         ADDA.W    screen_width,A0
  98.         DBRA    D0,.loop
  99.         MOVEM.L    (SP)+,D3-D5
  100.         RTS
  101.  
  102. xcopy16:    ; a0 ziel
  103.             ; a1 quelle
  104.             ; d0 lines-1
  105. .loop:    MOVE.W    (A1),(A0)
  106.         ADD.W    buffer_width,A0
  107.         ADD.W    source_width,A1
  108.         DBRA    D0,.loop
  109.         RTS
  110.  
  111. xxcopy32:    ;    xxcopy32(void *ziel,void *quelle,int lines,long maske)
  112.             ; a0 ziel
  113.             ; a1 quelle
  114.             ; d0 lines-1
  115.             ; d1 maske
  116.  
  117. .loop:    AND.L    D1,(A0)                ; zu setzende bits ausmaskieren
  118.         MOVE.L    (A1),D2                ; quelle nach D2
  119.         OR.L    D2,(A0)                ; bits setzen
  120.         ADD.W    buffer_width,A0
  121.         ADD.W    source_width,A1
  122.         DBRA    D0,.loop
  123.         RTS
  124.  
  125.  
  126.